#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define rep(i, a, b) for (int i = (a); i <= (b); i++)
#define per(i, a, b) for (int i = (a); i >= (b); i--)
#define endl '\n'
const int N = 1e6 + 5;

int n, m;
struct Node {
  int l, r;
  int id;
} a[N];
bool cmpl(Node a, Node b) {
  if (a.l != b.l) return a.l < b.l;
  return a.r < b.r;
}
bool cmpr(Node a, Node b) {
  if (a.r != b.r) return a.r < b.r;
  return a.l < b.l;
}
int f[N], g[N];

void solve() {
  cin >> n;
  if (n == 1) {
    cout << 1 << endl << 1;
    return;
  }
  rep(i, 1, n) a[i].id = i, cin >> a[i].l >> a[i].r;
  sort(a + 1, a + n + 1, cmpr);
  int mx = a[n].r;
  int j = n;
  per(i, mx, 1) {
    if (j >= 1 && a[j].r > i) {
      g[a[j].l] = max(g[a[j].l], g[a[j].r] + 1);
      j--;
    }
    g[i] = max(g[i], g[i + 1]);
  }
  sort(a + 1, a + n + 1, cmpl);
  j = 1;
  rep(i, 1, mx) {
    if (j <= n && a[j].l < i) {
      f[a[j].r] = max(f[a[j].r], f[a[j].l] + 1);
      j++;
    }
    f[i] = max(f[i], f[i - 1]);
  }
  set<int> ans;
  if (g[a[2].r] == n - 2) ans.insert(a[1].id);
  if (f[a[n - 1].l] == n - 2) ans.insert(a[n].id);
  rep(i, 2, n - 1) {
    if (a[i - 1].r > a[i + 1].l) continue;
    if (f[a[i - 1].l] + g[a[i + 1].r] == n - 3) ans.insert(a[i].id);
  }
  cout << ans.size() << endl;
  for (int x : ans) cout << x << ' ';
  return;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t;
  t = 1;
  while (t--) solve();
  return 0;
}